window: Fix deferred focus unsetting
authorMatthias Clasen <mclasen@redhat.com>
Fri, 16 Apr 2021 11:26:32 +0000 (07:26 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Fri, 16 Apr 2021 11:35:26 +0000 (07:35 -0400)
In commit 4a76abffd4d62cbb, we deferred unsetting focus
and default until after the next draw, overlooking the
case where the focus is set to another widget before we
ever get to the unsetting.

Fixes: #3413
gtk/gtkwindow.c

index 99bb28feb67604c2612a1d055fe53c5367d1655c..17beb19fa364302e1b4968e20afc6031f9941d2d 100644 (file)
@@ -2011,6 +2011,8 @@ gtk_window_root_set_focus (GtkRoot   *root,
 
   g_clear_object (&old_focus);
 
+  priv->move_focus = FALSE;
+
   g_object_notify (G_OBJECT (self), "focus-widget");
 }
 
@@ -2288,6 +2290,8 @@ gtk_window_set_default_widget (GtkWindow *window,
 
       priv->default_widget = default_widget;
 
+      priv->unset_default = FALSE;
+
       if (priv->default_widget)
        {
           if (priv->focus_widget == NULL ||
@@ -4671,16 +4675,10 @@ maybe_unset_focus_and_default (GtkWindow *window)
   GtkWindowPrivate *priv = gtk_window_get_instance_private (window);
 
   if (priv->move_focus)
-    {
-      gtk_widget_child_focus (GTK_WIDGET (window), GTK_DIR_TAB_FORWARD);
-      priv->move_focus = FALSE;
-    }
+    gtk_widget_child_focus (GTK_WIDGET (window), GTK_DIR_TAB_FORWARD);
 
   if (priv->unset_default)
-    {
-      gtk_window_set_default_widget (window, NULL);
-      priv->unset_default = FALSE;
-    }
+    gtk_window_set_default_widget (window, NULL);
 }
 
 static gboolean